#用python编写一个学生管理系统，具有以下几个功能：1添加学生信息，2删除学生信息，3修改学生信息，4查询学生信息，5.显示所有学生信息，6退出系统
#学生信息包括：姓名，年龄，学号，电话，其中一个学生数据未一个程序文件，所有学生的信息用一个目录来保存
#该程序需含有容错机制
#请在下方编写程序代码


#导入代码所需模块
import os
import pickle

#定义学生信息类
class Student:
    def __init__(self, name, age, id, phone):
        self.name = name
        self.age = age
        self.id = id
        self.phone = phone

#添加学生信息
def add_student():
    name = input("请输入学生姓名：")
    age = input("请输入学生年龄：")
    id = input("请输入学生学号：")
    phone = input("请输入学生电话：")
    student = Student(name, age, id, phone)
    with open(f"students/{id}.dat", "wb") as f:
        pickle.dump(student, f)
    print("学生信息添加成功！")

#删除学生信息
def delete_student():
    id = input("请输入要删除的学生学号：")
    try:
        os.remove(f"students/{id}.dat")
        print("学生信息删除成功！")
    except FileNotFoundError:
        print("学生信息不存在！")

#修改学生信息
def modify_student():
    id = input("请输入要修改的学生学号：")
    try:
        with open(f"students/{id}.dat", "rb") as f:
            student = pickle.load(f)
        name = input(f"请输入学生姓名({student.name})：") or student.name
        age = input(f"请输入学生年龄({student.age})：") or student.age
        phone = input(f"请输入学生电话({student.phone})：") or student.phone
        student = Student(name, age, id, phone)
        with open(f"students/{id}.dat", "wb") as f:
            pickle.dump(student, f)
        print("学生信息修改成功！")
    except FileNotFoundError:
        print("学生信息不存在！")


#查询学生信息
def query_student():
    id = input("请输入要查询的学生学号：")
    try:
        with open(f"students/{id}.dat", "rb") as f:
            student = pickle.load(f)
        print("学生信息如下：")
        print("姓名：", student.name)
        print("年龄：", student.age)
        print("学号：", student.id)
        print("电话：", student.phone)
    except FileNotFoundError:
        print("学生信息不存在！")


#显示所有学生信息
def show_students():
    files = os.listdir("students")
    for file in files:
        with open(f"students/{file}", "rb") as f:
            student = pickle.load(f)
        print("学生信息如下：")
        print("姓名：", student.name)
        print("年龄：", student.age)
        print("学号：", student.id)
        print("电话：", student.phone)

#退出系统
def exit_system():
    print("退出系统！")
    exit()

#定义功能字典
functions = {
    "1": add_student,
    "2": delete_student,
    "3": modify_student,
    "4": query_student,
    "5": show_students,
    "6": exit_system
}

#主程序
if __name__ == "__main__":
    if not os.path.exists("students"):
        os.mkdir("students")
    while True:
        print("学生管理系统")
        print("1.添加学生信息")
        print("2.删除学生信息")
        print("3.修改学生信息")
        print("4.查询学生信息")
        print("5.显示所有学生信息")
        print("6.退出系统")
        choice = input("请输入要执行的操作：")
        if choice in functions:
            functions[choice]()
        else:
            print("输入有误，请重新输入！")
